package leo.weixin.entity;

import com.alibaba.fastjson.annotation.JSONField;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.util.HashMap;
import java.util.Map;

@Data
@Accessors(chain = true)
public class MessageTemplate {

    @Setter(AccessLevel.NONE)
    private Map<String,DataDetail> data;
    @JSONField(name = "touser")
    private String toUser;
    @JSONField(name = "template_id")
    private String templateId;
    @JSONField(name = "url")
    private String url;
    @Setter(AccessLevel.NONE)
    @JSONField(name = "miniprogram")
    private MiniProgram miniProgram;

    /**
     * 初始化一个 简单的(默认样式)带标题 备注的模板消息
     * @param first
     * @param remark
     */
    public MessageTemplate(String first,String remark){
        this();
        addDataItem("first",first);
        addDataItem("remark",remark);
    }
    public MessageTemplate(){
        data = new HashMap<>();
    }

    /**
     * 添加普通消息项
     * @param name 消息项名称
     * @param value 消息内容
     * @return
     */
    public MessageTemplate addDataItem(String name,String value){
       return addDataItem(name, value,null);
    }
    /**
     * 添加普通消息项
     * @param color 颜色 支持英文 16进制  rgb格式未测试
     * @return
     */
    public MessageTemplate addDataItem(String name,String value,String color){
        data.put(name,new DataDetail(value,color));
        return this;
    }

    /**
     * 普通标题的添加
     * @param value
     * @return
     */
    public MessageTemplate addDataFirst(String value){
       return addDataItem("first",value);
    }

    /**
     * 样式标题的添加
     * @param value
     * @param color
     * @return
     */
    public MessageTemplate addDataFirst(String value,String color){
       return addDataItem("first",value,color);
    }
    public MessageTemplate addDataRemark(String value){
        return addDataItem("remark",value);
    }
    public MessageTemplate addDataRemark(String value,String color){
        return addDataItem("remark",value,color);
    }

    /**
     * 用来保存小程序信息
     */
    @Data
    private class MiniProgram {
        @JSONField(name = "appid")
        private String appId;
        @JSONField(name = "pagepath")
        private String pagePath;
    }

    /**
     * 设置小程序appid
     * @param appId
     * @return
     */
    public MessageTemplate setMiniProgramAppId(String appId){
        if (miniProgram == null){
            miniProgram = new MiniProgram();
        }
        miniProgram.setAppId(appId);
        return this;
    }
    /**
     * 设置点击消息 跳转的小程序页面
     * @param pagePath
     * @return
     */
    public MessageTemplate setMiniProgramPagePath(String pagePath){
        if (miniProgram == null){
            miniProgram = new MiniProgram();
        }
        miniProgram.setPagePath(pagePath);
        return this;
    }

    /**
     * 封装 值信息 颜色
     */
    @Data
    @AllArgsConstructor
    private class DataDetail{
        private String value ;
        private String color ;
    }
}
